package com.yjj.springboot3.ai.service;
import com.yjj.springboot3.ai.config.ChatProperties;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.stereotype.Service;

/**
 * AI服务类
 */
@Service
@RequiredArgsConstructor
@Slf4j
public class AiService {
    
    private final ChatClient chatClient;
    private final ChatProperties chatProperties;
    
    /**
     * AI聊天（使用默认消息数量限制）
     * @param conversationId 对话ID（数据库主键id）
     * @param userInput 用户输入
     * @return AI回复内容
     */
    public String chat(Long conversationId, String userInput) {
        // 使用配置中的默认消息数量限制
        int maxHistoryMessages = chatProperties.getMaxHistoryMessages();
        return chat(conversationId, userInput, maxHistoryMessages);
    }
    
    /**
     * AI聊天（指定消息数量限制）
     * @param conversationId 对话ID（数据库主键id）
     * @param userInput 用户输入
     * @param maxHistoryMessages 最大历史消息数量
     * @return AI回复内容
     */
    public String chat(Long conversationId, String userInput, int maxHistoryMessages) {
        try {
            log.info("AI聊天开始，对话ID: {}, 用户输入: {}, 最大历史消息数: {}", conversationId, userInput, maxHistoryMessages);

            // 直接通过advisor参数传递消息数量限制
            String response = chatClient.prompt()
                .user(userInput)
                .advisors(advisor -> advisor
                    .param("chat_memory_conversation_id", conversationId.toString())
                    .param("chat_memory_retrieve_size", maxHistoryMessages))
                .call()
                .content();
            
            log.info("AI聊天完成，对话ID: {}, AI回复长度: {}", conversationId, response.length());
            return response;
        } catch (Exception e) {
            log.error("AI聊天失败，对话ID: {}, 错误: {}", conversationId, e.getMessage(), e);
            throw new RuntimeException("AI聊天失败: " + e.getMessage(), e);
        }
    }
}
